<?php
// +-----------------------------------------------------------------------+
// |                                                                       |
// | WebFormsQA     (Question - Answer)                                    |
// | Copyright  (C) 2010                                                   |
// | Official site  www.scale-tech.ru                                      |
// | email          scale-tech@mail.ru                                     |
// | autor          Alexander Demachev                                     |
// |                                                                       |
// | This program is free software; you can redistribute it and/or modify  |
// | it under the terms of the GNU General Public License as published by  |
// | the Free Software Foundation; version 2 of the License.               |
// |                                                                       |
// | This program is distributed in the hope that it will be useful,       |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of        |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |
// | GNU General Public License for more details.                          |
// +-----------------------------------------------------------------------+

require_once(INCLUDES_DIR.'auth.class.php');

/*!
 * @page CategoryPagePage Исходный код класса CategoryPage
 * @include category_page.class.php
 */

/*! @addtogroup ClassWebFormsQA Основные классы проекта
 *  Группа включает основные классы используемые в проекте WebFormsQA
 *  @{
 */

/**
 * @class CategoryPage
 * @brief Страница для отображения дерева категорий, которое обычно размещается с левой стороны страницы \n
 * @ref CategoryPagePage
 */
class CategoryPage extends Page {

    /**
     *  конструктор
     *  @param object &$smarty_obj   - ссылка на обьект шаблона
     *  @param array  $attr          - массив атрибутов в формате attr["name"] = name_type;
     *  @param string $name_template - название шаблона
     */
    function CategoryPage(&$smarty_obj, $attr, $name_template)
    {
        parent::Page(&$smarty_obj, $attr, $name_template);
    }

    /** 
     * @brief обновить данные страницы
     *
     *  Состояния страницы:
     * - 1 - Авторизация не прошла (стр. EntrancePage),  или пользователь не зарегистрирован или у него нет административного доступа
     * - 2 - Успешная авторизация пользователя.
     * - 3 - Пользователь добавляет новую категорию в корневую. 
     * - 4 - Пользователь добавляет новую категорию в текущую выбранную. 
     * - 5 - Предупреждающее сообщение - данная категория уже есть.
	 * - 6 - вывод сообщения - вы должны указать название новой категории
     * - 7 - Вывод сообщения - категория успешно добавлена.
     * - 8 - Нажата ссылка удалить категорию, но категория не выбрана 
     * - 9 - Нажата ссылка удалить категорию, категория выбрана, вывод предупреждения
     * - 10- Категория успешно удалена
     * - 11- Категория удалена, но содержит вопросы, которые перенесли в корневую
     * - 12- Категория содержит под категории, вначале удалите их
     * 
     * @return bool результат операции
     */
    function update()
    {
        // обновляем атрибуты страницы и их значени
        // и главный шаблон Smarty
        if( $flag_result = parent::update() ) {

            $base   = &$GLOBALS['base'];
            $nav    = new Navigation($base);

            $state      		= 1;
            $category          	= '';
            $current_category   = '';
            $categoryID         = 0;
            // дерево категорий
            $categories_tree	= array();
            
            $flag_admin = false;
            if( AuthCommon::checkAuthUser($flag_admin) && $flag_admin ) {
				// авторизация прошла успешно
            	$state = 2;	 
            	AuthCommon::getAttrCategoryIDandSession($this, $categoryID);
            }


            if( $state == 2 ) {


				if( $this->attr['ref_add']['set'] ) {
					if( $categoryID ) $state = 4;
					else $state = 3;

                    $this->Smarty->assign('ref_add', 0);

                    if( $this->attr['but_category']['set'] ) {
						if( $this->attr['category']['set'] && $this->attr['category']['value']) {
							$category = $this->attr['category']['value'];
							$idNewCategory = $base->addCategory($categoryID, $category);

	                        if( $idNewCategory ) {
								$state = 7;
								// автоматический выбор новой категории
								$categoryID = $idNewCategory;
							} else $state = 5;

						} else $state = 6;
					}
				}

				if( $this->attr['ref_del']['set'] ) {
					if( $categoryID ) $state = 9;
					else $state = 8;

                    $this->Smarty->assign('ref_del', 0);

					if( $this->attr['but_category']['set'] ) {

						if( $this->attr['but_category']['value'] == STRING_OK ) {
							$state = 10;
							$code = $base->delCategory( $categoryID );

							switch( $code ) {
								case 0:		$state = 10; 	break;
								case 1:     $state = 11; 	break;  
								case 2:     $state = 12; 	break; 
							}


						} else if( $this->attr['but_category']['value'] == STRING_CANCEL ) {
							$state = 2;
						}
					    
					}
				}

				// получаем дерево категорий
				$nav->getTreeCategories($categoryID, CATEGORIES_TABLE, $categories_tree);

            } // пользователь авторизован
            
           
            if( $categoryID ) {
            	// ищу имя текущей категории 
            	for ($i = 0; $i < count($categories_tree); $i++) {
            		if( $categoryID == $categories_tree["$i"][0] ) {
            			$current_category = $categories_tree["$i"][1];
            			break;		
            		} 
            	}
            }
            

            // текущая выбранная вкладка
            $this->Smarty->assign('current_tabs', ID_PAGE_CATEGORY);
            $this->Smarty->assign('state', $state);

            reset($this->attr);
            // строка с главным параметром перехода на страницу - первый ключ в списке конструктора MainPage
            $tmp = "index.php?".key($this->attr);

            $this->Smarty->assign('code_page', $tmp);

            $this->Smarty->assign('categoryID', $categoryID);
            $this->Smarty->assign('category',   $category);
            $this->Smarty->assign('current_category', $current_category);
            $this->Smarty->assign('categories_tree', $categories_tree);
            
        } // выбрана данная страница

        return $flag_result;
    } // end update()

}  // finish class CategoryPage

/*! @} */

?>






